/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package br.com.pharmproject.dao;

import br.com.pharmproject.bean.Cidade;
import br.com.pharmproject.bean.Cliente;
import br.com.pharmproject.conexao.Conexao;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;

/**
 *
 * @author rodrigo
 */
public class ClienteDAO {
    
    
    private List<Cliente> clientes;
    
    private Cliente cliente;
    
    
    Statement stm = null;
    
    
    public ClienteDAO() throws ClassNotFoundException,  SQLException{
        Conexao.getInstance();
        stm = Conexao.getInstance().getConector().createStatement();
    }
    
    public Cliente getById(int idCliente) throws SQLException{
        
        cliente = new Cliente();
        
        String sql = "SELECT * FROM CLIENTE c, ENDERECO e, CIDADE cid "
                + "WHERE c.ID_ENDERECO = e.ID_ENDERECO"
                + "AND e.ID_CIDADE = cid.ID_CIDADE";
        ResultSet rs = stm.executeQuery(sql);
        
        
        while(rs.next()){
           
            cliente.setIdCliente(rs.getInt("ID_CLIENTE"));
            cliente.setNoCliente(rs.getString("NOME"));
            cliente.setFone1(rs.getString("FONE_1"));
            cliente.setFone1(rs.getString("FONE_2"));
            cliente.setCpf(rs.getInt("CPF"));
            cliente.getEndereco().setIdEndereco(rs.getInt("ID_ENDERECO"));
            cliente.getEndereco().setCep(rs.getString("CEP"));
            cliente.getEndereco().setBairro(rs.getString("BAIRRO"));
            cliente.getEndereco().setRua(rs.getString("RUA"));
            cliente.getEndereco().setNumero(rs.getString("NUMERO"));
            cliente.getEndereco().getCidade().setIdCidade(
                    rs.getInt("ID_CIDADE"));
            cliente.getEndereco().getCidade().setNomeCidade(
                    rs.getString("NOME"));
                            
        }
        
        return cliente;
    }
    
    public Cliente insert(Cliente cliente) throws ClassNotFoundException, 
            SQLException{
        
        
        String sqlUpdate = "INSERT INTO CLIENTE "
              + "(NOME, FONE_1, FONE_2, CPF, ID_ENDERECO)" + " VALUES "
              + "(?, ?, ?, ?)";
         
        PreparedStatement pstm = Conexao.getInstance()
                 .getConector().prepareStatement(sqlUpdate);
        pstm.setString(1, cliente.getNoCliente());
        pstm.setString(2, cliente.getFone1());
        pstm.setString(3, cliente.getFone2());
        pstm.setInt(4, cliente.getEndereco().getIdEndereco());
        

        pstm.executeUpdate(sqlUpdate);
        
        return cliente;
    }
    
    
    public List<Cliente> getAll() throws SQLException{
        
        clientes = new ArrayList<Cliente>();
                
        String sql = "SELECT * FROM CLIENTE c, ENDERECO e, CIDADE cid "
                + "WHERE c.ID_ENDERECO = e.ID_ENDERECO "
                + "AND e.ID_CIDADE = cid.ID_CIDADE";
        ResultSet rs = stm.executeQuery(sql);
        
        
        while(rs.next()){
            
            cliente = new Cliente();
           
            cliente.setIdCliente(rs.getInt("ID_CLIENTE"));
            cliente.setNoCliente(rs.getString("NOME"));
            cliente.setFone1(rs.getString("FONE_1"));
            cliente.setFone1(rs.getString("FONE_1"));
            cliente.setCpf(rs.getInt("CPF"));
            cliente.getEndereco().setIdEndereco(rs.getInt("ID_ENDERECO"));
            cliente.getEndereco().setCep(rs.getString("CEP"));
            cliente.getEndereco().setBairro(rs.getString("BAIRRO"));
            cliente.getEndereco().setRua(rs.getString("RUA"));
            cliente.getEndereco().setNumero(rs.getString("NUMERO"));
            cliente.getEndereco().getCidade().setIdCidade(
                    rs.getInt("ID_CIDADE"));
            cliente.getEndereco().getCidade().setNomeCidade(
                    rs.getString("NOME"));
                            
            clientes.add(cliente);
        }
        
        return clientes;
        
    }
    
    
    public void update(Cliente cliente) throws SQLException{
        
        
        String sqlUpdate = "UPDATE cliente set NOME = '" + cliente.getNoCliente()
                + "', CPF = '" + cliente.getCpf() 
                + "', FONE_1 =  '" + cliente.getFone1()
                + "', FONE_2 =  '" + cliente.getFone2()
                + " WHERE ID_CLIENTE = " + cliente.getIdCliente();
        
        
        stm.executeUpdate(sqlUpdate);
               
    }
    
    public void delete(int idCliente){
        
        String sqlDelete = "DELETE FROM cliente WHERE ID_CLIENTE = ? ";
        
        PreparedStatement pstm = null;
        ResultSet rs = null;
                
        try {
            
            pstm = Conexao.getInstance().getConector().prepareStatement(sqlDelete);
            pstm.setInt(1, idCliente);
            
            pstm.executeUpdate();
            
            
            
        } catch (SQLException | ClassNotFoundException e) {
            e.printStackTrace();
        } finally {
            Conexao.getInstance().closeConnection();
        }
        
    }
    
}
